草庐IT

Redis Hash哈希散列

全部标签

ruby - 递归打印哈希键和值对

我正在尝试定义一个函数,它可以以树格式打印出任何哈希值。该函数将执行如下操作:来自{"parent1"=>{"child1"=>{"grandchild1"=>1,"grandchild2"=>2},"child2"=>{"grandchild3"=>3,"grandchild4"=>4}}}到parent1:child1:grandchild1:1grandchild2:2child2:grandchild3:3grandchild4:4到目前为止,这是我的代码:defreadprop(foo)level=''iffoo.is_a?(Hash)foo.each_key{|key|if

ruby - 从较长的字符串生成短哈希字符串的最佳方法是什么

我正在尝试从Ruby中的较长字符串创建较短的非冲突字符串。最好的方法是什么?Base64编码MD5哈希?这是用例:loopdokey=short_hash("#{user_id}-#{timestamp}")breakif$redis.setnx(key,"0")end我不希望key太长。 最佳答案 我经常使用SHA与您的示例类似。它不能保证是唯一的,但通常足以满足大多数用途:require'digest/sha1'Digest::SHA1.hexdigest("#{user_id}-#{Time.now.to_i}-#{rand}

ruby-on-rails - 在 Rails 中,将散列压缩为嵌套散列的最佳方法是什么

假设我有这个:[{:user_id=>1,:search_id=>a},{:user_id=>1,:search_id=>b},{:user_id=>2,:search_id=>c},{:user_id=>2,:search_id=>d}]我想结束:[{:user_id=>1,:search_id=>[a,b]},{:user_id=>2,:search_id=>[c,d]}]最好的方法是什么? 最佳答案 确实是非常奇怪的要求。无论如何[{:user_id=>1,:search_id=>"a"},{:user_id=>1,:sear

ruby - 如何检测递归数组和哈希?

如何检测包含递归结构的数组或散列,例如下面的a、b和c?递归数组的最简单实例a=[]a[0]=aa#=>[[...]]递归周期/深度不是一个b=[[],:foo]b[0][0]=bb#=>[[[...]],:foo]非根级别的递归c=[a,:foo]c#=>[[...],:foo] 最佳答案 我喜欢递归。这是一种不错的方法,遍历所有内容并保留您看到的对象的哈希值(用于快速查找)classObjectdefis_recursive?(known={})falseendendmoduleEnumerabledefis_recursive

ruby - 覆盖散列并使 [] 运算符私有(private) - 不能再使用 ||=

测试代码:classPrivHash使用此代码,我希望set和set_maybe上类。然而,只有set作品和set_maybe失败:[30]pry(#):1>ph.set_maybe(:a,1)NoMethodError:privatemethod`[]'calledfor{:a=>2}:#Class:0x007f99c5924c38>::PrivHashfrom(pry):56:in`set_maybe'我假设self[:b]||=只是self[:b]||self[:b]=的语法糖,但我想这不是因为它有效。让我感到困扰的是为什么我会收到此错误。我是从类中执行的,所以为什么会收到私有(

ruby - 使用空数组意外行为初始化哈希

这个问题在这里已经有了答案:Strange,unexpectedbehavior(disappearing/changingvalues)whenusingHashdefaultvalue,e.g.Hash.new([])(4个答案)关闭3年前。我想用一个空的Array初始化一个Hash并且对于每个新键将特定值推送到该数组。这是我尝试做的:a=Hash.new([])#=>{}a[1]["asd"]a#=>{}a的预期输出是{1=>["asd"]}但这并没有发生。我在这里缺少什么?ruby版本:ruby2.0.0p598(2014-11-13revision48408)[x86_64-

ruby - 这种类似哈希/树状的构造称为什么?

我想创建一个介于散列和树之间的“Config”类。它只是用于存储全局值,可以有一个上下文。下面是我的使用方法:Config.get("root.parent.child_b")#=>"value"类可能如下所示:classConstructdefget(path)#splitpathby"."#searchtreefornodesenddefset(key,value)#splitpathby"."#createtreenodeifnecessary#settreevalueenddeftree{:root=>{:parent=>{:child_a=>"value",:child_b=

ruby - 如何将 Ruby 哈希 "up"中的属性移动一级

x={:name=>"John",:data=>{:physical=>{:age=>25,:weight=>150}}}我希望将数据的子属性向上移动一个级别(但不一定只是简单地展平所有属性)。在这种情况下,我基本上想将:physical属性“向上”移动一个级别。我正在尝试这个y=x[:data']y.each{|key|x[key]=y[key]}但是我得到...x=x.except(:data)=>{:name=>"John",[:physical,{:age=>25,:weight=>150}]=>nil}我在找...=>{:name=>"John",:physical=>{:a

ruby-on-rails - 通过键数组获取 ruby​​ 哈希值

我的目标是创建一个用散列初始化的对象,然后查询该对象以从该散列中获取值。为了让事情更清楚,这里有一个粗略的例子来说明我的意思:classHashHolderdefinitialize(hash)@hash=hashenddefget_value(*args)#Whataremypossibilitieshere?endendholder=HashHolder.new({:a=>{:b=>{:c=>"value"}}})holder.get_value(:a,:b,:c)#shouldreturn"value"我知道我可以对参数列表执行迭代,如下所示:defget_value(*args

ruby - 在 ruby​​ 2.2.0 中创建哈希的新方法

在ruby​​2.2.0中你可以这样写哈希:hash={'new_possible_style'::of_hashes}hash[:new_possible_style]#=>:of_hasheshash['new_possible_style']#=>nil我无法理解实现这种风格的原因。如果我需要字符串作为键(例如,对于某些第三方库),我仍然必须使用旧式哈希。此“功能”的用例是什么?为什么核心开发人员要添加这种样式?提前致谢。 最佳答案 这不是一种新的哈希表示方式,而是在1.9中以一致的方式添加的现有样式的扩展。在1.9中,你可以